home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Freeware 1998 June
/
SGI Freeware 1998 June.iso
/
dist
/
fw_UMINNgopher.idb
/
usr
/
freeware
/
src
/
gopher_1.12
/
gopherd
/
NeXTindex.c.z
/
NeXTindex.c
Wrap
C/C++ Source or Header
|
1997-09-09
|
4KB
|
143 lines
/********************************************************************
* $Author: drich $
* $Revision: 1.1 $
* $Date: 1995/10/03 04:08:21 $
* $Source: /proj/freeware1.0/gopher1.12/src/gopherd/RCS/NeXTindex.c,v $
* $Status: $
*
* Paul Lindner, University of Minnesota CIS.
*
* Copyright 1991, 1992 by the Regents of the University of Minnesota
* see the file "Copyright" in the distribution for conditions of use.
*********************************************************************
* MODULE: NeXTindex.c
* index interface to the NeXT text indexing routines.
*********************************************************************
* Revision History:
* $Log: NeXTindex.c,v $
* Revision 1.1 1995/10/03 04:08:21 drich
* gopher 1.2 check-in
*
* Revision 1.1 1992/12/10 23:13:27 lindner
* gopher 1.1 release
*
*
*********************************************************************/
#include <sys/stat.h>
#include "text/wftable.h"
#include "text/ix.h"
#include "gopherd.h"
int
myInterruptRoutine()
{
/* for now, always return 0 so the search is not interrupted */
return(0);
}
void
NeXTIndexQuery(sockfd, SearchWords, ZIndexDirectory, DatabaseNm, INDEXHost, INDEXPort, INDEXPath)
int sockfd;
char *SearchWords;
char *ZIndexDirectory;
char *DatabaseNm; /*** Not used by the next indexer... ***/
char *INDEXHost;
int INDEXPort;
char *INDEXPath;
{
unsigned long i;
char *cp;
int j;
Index *workingIndex;
RefList theRefList;
RefList *ptrtheRefList;
Reference *MyReference;
FileCell *f;
char tempstr[40];
char outputline[1024];
GopherObj *gs;
GopherDirObj *gd;
gs = GSnew();
gd = GDnew(32);
if (DEBUG) {
printf("Nextindexer called: Search %s, Indexdir %s\n", SearchWords, ZIndexDirectory);
}
/*** Try to open the index a couple of times ***/
for (j=0; j< 4; j++) {
workingIndex = ixOpen( ZIndexDirectory, "r" );
if (workingIndex != NULL)
break;
else
usleep (50);
}
if ( workingIndex != 0 ) {
theRefList = ixIndexQuery(workingIndex, SearchWords, ixSearchByFullWord,
ixMatchContent, ixLiteralString,
(myInterruptRoutine));
for( i=0; i < theRefList.n; i++ ){
MyReference = &(theRefList.r[i]);
f = (*MyReference).f;
/*** The Selector String ***/
/*** So far we only index text files, so put a 0 in front ***/
if (strstr((*f).file, ".cache") != NULL) {
continue;
}
GSsetType(gs, '0');
/*** Process the description field, remove any crud, replace
with spaces. ***/
{
char *moo = f->desc;
while (*moo != '\0') {
if (!isprint(*moo))
*moo = ' ';
moo++;
}
}
GSsetTitle(gs, (f->desc)+1);
GSsetHost(gs, INDEXHost);
GSsetPort(gs, INDEXPort);
cp = strstr(f->file, INDEXPath);
if (cp == NULL)
sprintf(outputline, "0/%s", f->file);
else
sprintf(outputline, "0/%s", cp);
if (MacIndex)
GSsetPath(gs, f->file);
else
GSsetPath(gs, outputline);
GSsetWeight(gs, (int)(MyReference->weight * 1000.0));
GDaddGS(gd, gs);
}
if (UsingHTML)
GDtoNetHTML(gd, sockfd);
else
GDtoNet(gd, sockfd);
writestring(sockfd, ".\r\n");
}
else {
fprintf(stderr,"can't open working index\n" );
}
GSdestroy(gs);
GDdestroy(gd);
/* all done.... close the index file */
}